package com.aegis.common.base;

import java.util.EnumSet;

/**
 * @author renogo
 * @version 1.0.0
 * @ClassName BaseEnum.java
 */
public interface BaseValueEnum<T> {

    /**
     * @return
     */
    T getValue();

    String getDesc();

    /**
     * @param eClass
     * @param <E>
     * @return
     */
    static <E extends Enum<E> & BaseValueEnum<?>> BaseValueEnum<?>[] values(Class<E> eClass) {
        EnumSet<E> all = EnumSet.allOf(eClass);
        return all.toArray(new BaseValueEnum[]{});
    }


    /**
     * @param eClass
     * @param value
     * @param <E>
     * @return
     */
    static <E extends Enum<E> & BaseValueEnum<?>> E intValue2Enum(Class<E> eClass, Integer value) {
        for (BaseValueEnum<?> baseValueEnum : values(eClass)) {
            if (baseValueEnum.getValue().equals(value)) {
                return (E) baseValueEnum;
            }
        }
        return null;
    }


    /**
     * @param eClass
     * @param value
     * @param <E>
     * @return
     */
    static <E extends Enum<E> & BaseValueEnum<?>> E strValue2Enum(Class<E> eClass, String value) {
        for (BaseValueEnum<?> baseValueEnum : values(eClass)) {
            if (baseValueEnum.getValue().equals(value)) {
                return (E) baseValueEnum;
            }
        }
        return null;
    }

}
